/**
 * Toast 提示工具
 * 统一使用新的 ToastNotification 组件
 */

import toastManager from './toast-manager.js'

/**
 * 显示 Toast 提示
 * @param {Object} options - Toast 配置
 * @param {String} options.title - 提示标题
 * @param {String} options.message - 提示消息（可选）
 * @param {String} options.icon - 图标类型 'success' | 'error' | 'loading' | 'none'
 * @param {String} options.type - 类型：success, error, info, warning
 * @param {Number} options.duration - 显示时长（毫秒），默认 2500
 */
export function showToast(options = {}) {
  const title = options.title || '提示'
  const icon = options.icon || ''
  const type = options.type || (icon === 'success' ? 'success' : icon === 'error' ? 'error' : 'info')
  
  // 将旧的 icon 参数转换为新的 type
  let toastType = type
  if (!toastType && icon) {
    if (icon === 'success') {
      toastType = 'success'
    } else if (icon === 'error') {
      toastType = 'error'
    } else if (icon === 'loading') {
      toastType = 'info'
    } else {
      toastType = 'info'
    }
  }

  // 如果是 loading，使用原生 loading（因为新组件不支持 loading 动画）
  if (icon === 'loading') {
    uni.showLoading({
      title: title,
      mask: options.mask !== false
    })
    return
  }

  // 使用新的 ToastNotification 组件
  toastManager.showToast({
    title: title,
    message: options.message || '',
    type: toastType,
    icon: icon,
    duration: options.duration || 2500
  })
}

/**
 * 隐藏当前 Toast
 */
export function hideToast() {
  toastManager.hideToast()
  try {
    uni.hideLoading()
    uni.hideToast()
  } catch (e) {
    // 忽略错误
  }
}

/**
 * 显示成功提示
 * @param {String} title - 提示标题
 * @param {String} message - 提示消息（可选）
 * @param {Number} duration - 显示时长，默认 2500ms
 */
export function showSuccess(title, message = '', duration = 2500) {
  toastManager.showSuccess(title, message, duration)
}

/**
 * 显示错误提示
 * @param {String} title - 提示标题
 * @param {String} message - 提示消息（可选）
 * @param {Number} duration - 显示时长，默认 3000ms
 */
export function showError(title, message = '', duration = 3000) {
  toastManager.showError(title, message, duration)
}

/**
 * 显示加载提示（使用原生 loading）
 * @param {String} title - 提示文字，默认 '加载中...'
 * @param {Boolean} mask - 是否显示蒙层，默认 true
 */
export function showLoading(title = '加载中...', mask = true) {
  uni.showLoading({
    title: title,
    mask: mask
  })
}

export default {
  showToast,
  hideToast,
  showSuccess,
  showError,
  showLoading
}

